<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of persistenciaCliente
 *
 * @author Agustin
 */
//require_once ('Modelo/clienteAdministracion.php');
//require_once ('Modelo/clienteParticular.php');
//require_once ('Modelo/telefono.php');
//require_once ('Modelo/lugar.php');

class ControladoraCliente {

    private static $instancia;

    public static function getInstance() {
        if (!self::$instancia instanceof self) {
            self::$instancia = new self;
        }
        return self::$instancia;
    }

    public function buscarClienteNombre($datos, $tipocliente) {
        require_once ('Modelo/clienteAdministracion.php');
        require_once ('Modelo/clienteParticular.php');
        if ($tipocliente == 1) {
            $clienteAdmin = new clienteAdministracion;
            $_SESSION['clientes'] = $clienteAdmin->buscarClienteNombreAdmin($datos);
        } else {
            $clientePart = new ClienteParticular;
            $_SESSION['clientes'] = $clientePart->buscarClienteNombre($datos);
        }
    }

    public function agenda($datos) {
        require_once ('../Modelo/persistenciaCliente.php');
        return PersistenciaCliente::getInstance()->agenda($datos);
    }

    public function buscarClienteId($id, $tipocliente) {
        require_once ('Modelo/clienteAdministracion.php');
        require_once ('Modelo/clienteParticular.php');
        if ($tipocliente) {
            $clienteAdmin = new clienteAdministracion;
            $_SESSION['cliente'] = $clienteAdmin->buscarClienteIdAdmin($id);
        } else {
            $clientePart = new ClienteParticular;
            $_SESSION['cliente'] = $clientePart->buscarClienteId($id);
        }
    }

    public function agregarCliente($datos, $tipo) {
        if ($tipo) {
            return $this->agregarClienteAdmin($datos);
        } else {
            return $this->agregarClientePart($datos);
        }
    }

    private function agregarClienteAdmin($datos) {
        try {
            require_once ('Modelo/clienteAdministracion.php');
            require_once ('Modelo/clienteParticular.php');
            $clienteAdmin = new clienteAdministracion;
            return $clienteAdmin->agregarClienteA($datos);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    private function agregarClientePart($datos) {
        require_once ('Modelo/clienteAdministracion.php');
        require_once ('Modelo/clienteParticular.php');
        try {
            $clientePart = new ClienteParticular();
            return $clientePart->agregarClienteP($datos);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function actualizarCliente($datos, $tipocliente) {

        require_once ('Modelo/clienteAdministracion.php');
        require_once ('Modelo/clienteParticular.php');
        if ($tipocliente) {
            try {

                $clienteAdmin = new clienteAdministracion;
                return $clienteAdmin->actualizarClienteA($datos);
            } catch (Exception $ex) {
                throw $ex;
            }
        } else {
            try {
                $clientePart = new ClienteParticular;
                return $clientePart->actualizarClienteP($datos);
            } catch (Exception $ex) {
                throw $ex;
            }
        }
    }

    public function agregarTelACliente($idcliente, $numero) {
        require_once ('Modelo/telefono.php');
        try {
            $telCls = new Telefono(null);
            return $telCls->agregarTelCliente($idcliente, $numero);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function agregarTelALugar($idlugar, $numero) {
        require_once ('Modelo/telefono.php');
        try {
            $telCls = new Telefono(null);
            return $telCls->agregarTelLugar($idlugar, $numero);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function modificarTel($idtel, $numero) {
        require_once ('Modelo/telefono.php');
        try {
            $telCls = new Telefono(null);
            return $telCls->actualizarTelefono($idtel, $numero);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function delTelACliente($idtel) {
        require_once ('Modelo/telefono.php');
        try {
            $telCls = new Telefono(null);
            return $telCls->eliminarTelCliente($idtel);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function delTelALugar($idtel) {
        require_once ('Modelo/telefono.php');
        try {
            $telCls = new Telefono(null);
            return $telCls->eliminarTelLugar($idtel);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function agregarLugarCliente($datos) {
        require_once ('Modelo/lugar.php');
        try {
            $lug = new Lugar(null);
            if (preg_match('/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/', $datos[5])) {
                return $lug->crearLugar($datos);
            } else {
                return 'El correo no es correcto.';
            }
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function modificarLugar($datos) {
        require_once ('Modelo/lugar.php');
        try {
            $lug = new Lugar(null);
            if (preg_match('/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/', $datos[5])) {
                return $lug->actualizarLugar($datos);
            } else {
                return 'El correo no es correcto.';
            }
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function delLugar($idlugar) {
        require_once ('Modelo/lugar.php');
        try {
            $lug = new Lugar(null);
            return $lug->eliminarLugar($idlugar);
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function cargarTelefono($idtel) {
        require_once ('Modelo/persistenciaTelefono.php');
        $_SESSION['telefono'] = PersistenciaTelefono::getInstance()->traerTelefonos($idtel);
    }

    public function cargarLugar($idlug) {
        require_once ('Modelo/lugar.php');
        if ($idlug != 0) {
            $lug = new Lugar(null);
            $_SESSION['lugar'] = $lug->traerLugar($idlug);
        } else {
            $_SESSION['lugar'] = new Lugar(null);
        }
    }

    public function cargarCliente($tipo) {
        require_once ('Modelo/clienteAdministracion.php');
        require_once ('Modelo/clienteParticular.php');
        if ($tipo == 1) {
            $_SESSION['cliente'] = new ClienteAdministracion();
        } else {
            $_SESSION['cliente'] = new ClienteParticular();
        }
    }

    public function traerClientes($aux) {
        try {
            require_once '../Modelo/persistenciaCliente.php';

            return $res = PersistenciaCliente::getInstance()->traerClientes($aux);
        } catch (Exception $ex) {
            throw new Exception('Error en la controladora del cliente.');
        }
    }

    public function traerClientesA($aux) {
        try {
            require_once 'Modelo/persistenciaCliente.php';

            return $res = PersistenciaCliente::getInstance()->traerClientes($aux);
        } catch (Exception $ex) {
            throw new Exception('Error en la controladora del cliente.');
        }
    }

    public function tipoCliente($id) {
        $this->buscarClienteId($id, true);
        if ($_SESSION['cliente']->nombre != 'N') {
            return true;
        } else {
            $this->buscarClienteId($id, false);
            return false;
        }
    }

    public function partadmin($id) {
        try {
            require_once '../Modelo/persistenciaCliente.php';
            return PersistenciaCliente::getInstance()->partadmin($id);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

}

?>
